The recent revolution in technologies for dynamically sharing virtualizations of hardware resources, software, and information storage across networks has increased the reliability, scalability, and cost efficiency of computing. More specifically, the ability to provide on demand virtual computing resources and storage through the advent of virtualization has enabled consumers of processing resources and storage to flexibly structure their computing and storage costs in response to immediately perceived computing and storage needs. Virtualization allows customers to purchase processor cycles and storage at the time of demand, rather than buying or leasing fixed hardware in provisioning cycles that are dictated by the delays and costs of manufacture and deployment of hardware. Rather than depending on the accuracy of predictions of future demand to determine the availability of computing and storage, users are able to purchase the use of computing and storage resources on a relatively instantaneous as-needed basis.
Virtualized computing environments are frequently supported by block-based storage. Such block-based storage provides a storage system that is able to interact with various computing virtualizations through a series of standardized storage calls that render the block-based storage functionally agnostic to the structural and functional details of the volumes that it supports and the operating systems executing on the virtualizations to which it provides storage availability.
Some block-based storage systems utilize a server node and multiple storage nodes that are serviced by the server node or dual server nodes that service multiple storage nodes. For example, a storage area network (SAN) may include such an architecture. However, in such systems, a failure of one or more of the server nodes may result in a large amount of storage capacity served by the server node(s) being rendered unusable or may result in significant decreases in the ability of the storage system to service read and write requests.
In order to increase durability of data, some block-based storage systems may store data across multiple devices in multiple locations. For example, a SAN may span multiple locations such as different facilities or different geographic locations. Such systems may utilize a common control plane to manage data in the multiple locations. However, in such systems, a failure of a component of the common control plane may impact a large quantity of storage capacity and render the large quantity of storage capacity unavailable. Also, such systems may require extensive networks to move data between the multiple locations and may also result in high latencies for data recovery due to data being located across the multiple locations.
While embodiments are described herein by way of example for several embodiments and illustrative drawings, those skilled in the art will recognize that the embodiments are not limited to the embodiments or drawings described. It should be understood, that the drawings and detailed description thereto are not intended to limit embodiments to the particular form disclosed, but on the contrary, the intention is to cover all modifications, equivalents and alternatives falling within the spirit and scope as defined by the appended claims. The headings used herein are for organizational purposes only and are not meant to be used to limit the scope of the description or the claims. As used throughout this application, the word “may” is used in a permissive sense (i.e., meaning having the potential to), rather than the mandatory sense (i.e., meaning must). Similarly, the words “include”, “including”, and “includes” mean including, but not limited to.